void main() {
  // 1. 第一种定义list的方式
  // var l1 = ["张三", 1, true];
  // print(l1);
  // print(l1.length); //3, 集合类型的数据身上有个length属性可以获取到它的长度
  // print(l1[0]); //可以根据下标获取集合中对应位置的数据

  // 2. 第二种定义集合的方式(指定类型)
  // var l2 = <String>["cold", "hello"]; //指定这个集合只能存放字符串类型的数据，你往里放别的会爆红
  // print(l2);

  // 3. 第三种定义集合的方式  增加数据 ，通过[]创建的集合的容量是可以变化的
  // var l4 = [];

  // // add()可以给集合添加数据
  // l4.add('张三');
  // l4.add(1);
  // print(l4);
  // print(l4.length);

  // 4. 第四种创建集合的方式（该方式已被废弃）
  // var l6 = new List();

  // 使用List.filled()可以创建一个固定长度的集合，第一个参数为长度，第二个参数为你想把每一项初始化为什么值，我们这里使用空字符串
  var l6 = List.filled(3, "");
  print(l6); //[, , ]
  l6[0] = '张三';
  l6[1] = '李四';
  l6[2] = '王五';
  print(l6); //[张三, 李四, 王五]
  // l6.add("赵六");//报错，因为l6是一个固定长度的集合，你调用add等于是在修改长度
  // l6.length = 10;//报错，因为l6是一个固定长度的集合，你在试图修改长度

  // 话又说回来，如果声明的时候不是固定长度的集合，那么他的length可以改变吗，答案是肯定的
  var l7 = [1,2,3];
  l7.length = 0;
  print(l7);
  print(l7.length);

  // 如果我想声明一个固定长度与数据类型的集合呢？你这样写就行了
  var l8 = List<String>.filled(2, "");
  // l8[0] = 1;//爆红
  l8[0] = 'somebody';
  l8[1] = 'lover';
  print(l8);
}
